//引入element-ui弹框
import { Message } from 'element-ui'
// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
// import { Promise } from 'core-js'
//引入仓库
import store from '@/store'
//引入登录的时间
import { getTime } from '@/utils/auth'
//引入路由
import router from '@/router'
const tokenLongTime = 60 * 60 * 2 //token过期时长  2小时
const checkTimeOut = () => {
        const now = Date.now() //现在时间
        const old = getTime() //登陆时间
        return ((now - old) / 1000) > tokenLongTime //看是不是超过了 true false
    }
    // 创建一个axios的实例
const service = axios.create({
        //在环境变量里面自定义，这样更好的区分开发环境还是生产环境，两个的baseurl是不一样的
        baseURL: process.env.VUE_APP_BASE_API
    })
    // 请求拦截器
service.interceptors.request.use(async config => {
        //在请求拦截器里统一注入token
        const token = store.getters.token
        if (token) {
            //如果token过期了，就退出，跳转到登录
            if (checkTimeOut()) {
                await store.dispatch('user/logout')
                Message.error('token过期，重新登陆')
                router.push('/login')
                return Promise.reject(new error('token过期'))
            }
            config.headers['Authorization'] = `Bearer ${token}`
        }

        return config //这步必写，必须要返回一个config
    }, error => {
        return Promise.reject(error)
    })
    // 响应拦截器   使用响应拦截，response会去掉一层data所以登录接口返回的数据要修改
service.interceptors.response.use(response => {
    const { success, data, message } = response.data //返回的会有这几项
        //如果请求成功
    if (success) {
        //当前是业务正确
        return data //就是token
    } else {
        //业务错误（像账号密码不正确之类）
        Message.error('登录失败')
        return Promise.reject(message)
    }
}, async error => {
    if (error.response && error.response.data && error.response.data.code === 10002) {
        // 当等于10002的时候 表示后端告诉我token超时了
        Message.error('token过期了，重新登陆')
        await store.dispatch('user/logout')
        router.push('/login')
        return Promise.reject(new error('token过期了，重新登陆'))
    }
    Message.error(error.message) // 提示错误信息
    return Promise.reject(message)
})

// 导出axios实例
export default service